/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import dao.DaoPessoaLocal;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import pojo.Pessoa;

@ManagedBean
@SessionScoped
public class PessoaBean {

    private Pessoa pessoa;
    private Boolean editando = false;
    private Pessoa regAnterior;
    private Pessoa pessoaSelecionada;
    private String nomePesquisa;
    @EJB
    private DaoPessoaLocal daoPessoa;

    public PessoaBean() {
        pessoa = new Pessoa();
        pessoaSelecionada = new Pessoa();
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public void salvar(ActionEvent actionEvent) {
        System.out.println("BT Salvar Pessoa");

        try {
            pessoa = daoPessoa.salvar(pessoa);
            editando = false;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Registro gravado com sucesso."));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao salvar: " + ex.getMessage(), null));
        }

        System.out.println("ID Pessoa salva: " + pessoa);
    }

    public void excluir(ActionEvent actionEvent) {
        System.out.println("BT Excluir Pessoa");
        try {
            daoPessoa.excluir(pessoa);
            pessoa = new Pessoa();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Excluído com sucesso."));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao excluir: " + ex.getMessage(), null));
        }


    }

    public void editar(ActionEvent actionEvent) {
        System.out.println("BT Editar Pessoa");
        regAnterior = pessoa;
        editando = true;
    }

    public void cancelar(ActionEvent actionEvent) {
        System.out.println("BT Cancelar Pessoa");
        pessoa = regAnterior;
        editando = false;
    }

    public void novo(ActionEvent actionEvent) {
        System.out.println("BT Novo Pessoa");
        regAnterior = pessoa;
        pessoa = new Pessoa();
        editando = true;
    }

    public void setPessoaSelecionada(Pessoa pessoa) {
        if (pessoa != null) {
            this.pessoaSelecionada = pessoa;
            this.pessoa = this.pessoaSelecionada;
            System.out.println("setPessoaSelecionada: " + pessoaSelecionada.getNome());
        }
    }

    public Pessoa getPessoaSelecionada() {
        System.out.println("getPessoaSelecionada" + pessoaSelecionada.getNome());
        return this.pessoaSelecionada;

    }

    public String getNomePesquisa() {
        return nomePesquisa;
    }

    public void setNomePesquisa(String nomePesquisa) {
        this.nomePesquisa = nomePesquisa;
    }

    public List<Pessoa> getFiltraPessoaNome() {
        if (getNomePesquisa() != null && getNomePesquisa().length() > 1) {
            return daoPessoa.buscaNomesPessoa(getNomePesquisa());
        } else {
            return null;
        }

    }

    public boolean isEditando() {
        return editando;
    }

    public boolean isNovoDesativado() {
        return isEditando();
    }

    public boolean isEditarDesativado() {
        return (isEditando() || pessoa.getIdPessoa() == null);
    }

    public boolean isSalvarDesativado() {
        return !isEditando();
    }

    public boolean isExcluirDesativado() {
        return isEditarDesativado();
    }

    public boolean isCancelarDesativado() {
        return isSalvarDesativado();
    }

    public boolean isCamposDesativados() {
        return !isEditando();
    }

    public boolean isPesquisarDesativado() {
        return isNovoDesativado();
    }


}
